package org.upo.eps.it.phama.bean;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

@Entity
@Table(name="far_cliente", catalog="phama")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "cliente")
public class Cliente  implements Serializable {

     @Id 
     @GeneratedValue(strategy=IDENTITY)
     @Column(name="ID_CLIENTE", unique=true, nullable=false)
     private Integer idCliente;
     
     @ManyToOne(fetch=FetchType.EAGER)
     @JoinColumn(name="ID_DIRECCION", nullable=false)
     private Direccion direccion;
     
     @Column(name="NOMBRE", nullable=false)
     private String nombre;
     
     @Column(name="CONTACTO", nullable=false)
     private String contacto;
     
     @Column(name="EMAIL", nullable=false)
     private String email;
     
     @Column(name="TELEFONO", nullable=false, length=9)
     private String telefono;
     
     @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER, mappedBy="cliente")
     @XmlTransient
     private Set<PedidoCliente> misPedidosCliente = new HashSet<>(0);

     //<editor-fold defaultstate="collapsed" desc="constructors">
     public Cliente() {
     }
     
     public Cliente(Direccion direccion, String nombre, String contacto, String email, String telefono) {
         this.direccion = direccion;
         this.nombre = nombre;
         this.contacto = contacto;
         this.email = email;
         this.telefono = telefono;
     }
     public Cliente(Direccion direccion, String nombre, String contacto, String email, String telefono, Set<PedidoCliente> misPedidosCliente) {
         this.direccion = direccion;
         this.nombre = nombre;
         this.contacto = contacto;
         this.email = email;
         this.telefono = telefono;
         this.misPedidosCliente = misPedidosCliente;
     }
     //</editor-fold>
  
     //<editor-fold defaultstate="collapsed" desc="getters & setters">
     public Integer getIdCliente() {
         return this.idCliente;
     }
     
     public void setIdCliente(Integer idCliente) {
         this.idCliente = idCliente;
     }
     
     public Direccion getDireccion() {
         return this.direccion;
     }
     
     public void setDireccion(Direccion direccion) {
         this.direccion = direccion;
     }
     
     public String getNombre() {
         return this.nombre;
     }
     
     public void setNombre(String nombre) {
         this.nombre = nombre;
     }
     
     
     public String getContacto() {
         return this.contacto;
     }
     
     public void setContacto(String contacto) {
         this.contacto = contacto;
     }
     
     public String getEmail() {
         return this.email;
     }
     
     public void setEmail(String email) {
         this.email = email;
     }
     
     public String getTelefono() {
         return this.telefono;
     }
     
     public void setTelefono(String telefono) {
         this.telefono = telefono;
     }
     
     public Set<PedidoCliente> getMisPedidosCliente() {
         return this.misPedidosCliente;
     }
     
     public void setMisPedidosCliente(Set<PedidoCliente> misPedidosCliente) {
         this.misPedidosCliente = misPedidosCliente;
     }
     //</editor-fold>

     @Override
     public String toString(){
         return nombre;
     }
     
     public String getFullname() {
         return this.toString();
     }
}


